package main

import (
	"flag"
	"fmt"
	"os"
)

var name string

// 方式3。更灵活
var cmdLine = flag.NewFlagSet("question", flag.ExitOnError)

//flag.ExitOnError的含义是，告诉命令参数容器，当命令后跟--help或者参数设置的不正确的时候，在打印命令参数使用说明后以状态码2结束当前程序。
//flag.PanicOnError与之的区别是在最后抛出“运行时恐慌（panic）”
func init() {
	// 方式2。
	//flag.CommandLine = flag.NewFlagSet("", flag.ExitOnError)
	//flag.CommandLine.Usage = func() {
	//	fmt.Fprintf(os.Stderr, "Usage of %s:\n", "question")
	//	flag.PrintDefaults()
	//}
	// 方式3。
	cmdLine.StringVar(&name, "name", "everyone", "The greeting object.")
	//flag.StringVar(&name, "name", "everyone", "The greeting object.")
}

func main() {
	// 方式1。
	//flag.Usage = func() {
	//	fmt.Fprintf(os.Stderr, "Usage of %s:\n", "question")
	//	flag.PrintDefaults()
	//}
	// 方式3。
	cmdLine.Parse(os.Args[1:]) //给定的那些命令参数
	//flag.Parse()
	fmt.Printf("Hello, %s!\n", name)
}
